13-6 洏 MATLABおwi蚹Gt@堣k

除了可以直接使用 SQL 命令來對資料庫進行修改外,MATLAB的資料庫工具箱也提供了一些指令,具有類似的修改功能,此即為本小節之重點。事實上,這些指令最後也是將相關動作轉成 SQL 命令後,在經由 ODBC 送到資料庫執行。因此如果你對 SQL 很熟,應該就直接使用前一節提到的方法,會比較直覺一些。

若要新增資料,可以使用 insert 指令,請見下列範例 。

Example 1: 13-與資料庫的整合/insertData02.mcopyfile('score01.mdb', 'score02.mdb'); % 將 score01.mdb 拷貝到 score02.mdb dsn = 'dsnScore02'; % 設定資料來源名稱(指到 score02.mdb) logintimeout(5); % 設定嘗試連結資料庫的時間 conn = database(dsn, '', ''); % 連結資料庫 exec(conn, 'DELETE * from score'); % 先刪除所有的資料 colNames={'studentId', 'studentName', 'overall'}; % 新增資料的欄位名稱 dataValues={'0001', '陳江村', 100}; % 新增資料對應的欄位值 insert(conn, 'score', colNames, dataValues); % 加入一筆資料 cursor = exec(conn, 'select * from score'); cursor = fetch(cursor); newScore = cursor.data % 顯示更新後 final 欄位的資料 close(cursor); % 結束 cursor 物件 close(conn); % 結束資料庫連結newScore = '0001' '陳江村' [0] [NaN] [NaN] [NaN] [0] [100]

在上述範例中,我們使用 MATLAB 的 insert 指令來新增一筆資料,其中 colNames 指定新增資料所用到的欄位名稱(沒有指定的欄位名稱會對應到資料庫的預設值),而 dataValues 則是新資料對應到 colNames 的欄位值。如果 dataValues 是一個矩陣,那麼 insert 會將每一列當成一筆資料,因此可以一次新增數筆資料,範例如下:

Example 2: 13-與資料庫的整合/insertData03.mcopyfile('score01.mdb', 'score02.mdb'); % 將 score01.mdb 拷貝到 score02.mdb dsn = 'dsnScore02'; % 設定資料來源名稱(指到 score02.mdb) logintimeout(5); % 設定嘗試連結資料庫的時間 conn = database(dsn, '', ''); % 連結資料庫 exec(conn, 'DELETE * from score'); % 先刪除所有的資料 colNames={'studentId', 'studentName', 'overall'}; % 新增資料的欄位名稱 dataValues={'0001', '陳江村', 100; '0002', '林政源', 97}; % 新增資料對應的欄位值 insert(conn, 'score', colNames, dataValues); % 加入兩筆資料 cursor = exec(conn, 'select * from score'); cursor = fetch(cursor); newScore = cursor.data % 顯示更新後 final 欄位的資料 close(cursor); % 結束 cursor 物件 close(conn); % 結束資料庫連結newScore = '0001' '陳江村' [0] [NaN] [NaN] [NaN] [0] [100] '0002' '林政源' [0] [NaN] [NaN] [NaN] [0] [ 97]

MATLAB 也提供了一個 update 指令,可以更新資料庫中的資料,在下列範例中,若期末成績大於或等於80分,我們直接將之調整為100分:

Example 3: 13-與資料庫的整合/updateData02.mcopyfile('score01.mdb', 'score02.mdb'); % 將 score01.mdb 拷貝到 score02.mdb dsn = 'dsnScore02'; % 設定資料來源名稱(指到 score02.mdb) logintimeout(5); % 設定嘗試連結資料庫的時間 conn = database(dsn, '', ''); % 連結資料庫 colNames={'final'}; % 需更新的欄位 dataValues={100}; % 更新後的欄位值 update(conn, 'score', colNames, dataValues, 'where final>=80'); % 設定進行資料查詢的 SQL 命令 sql = 'select studentName, final from score'; % 設定 SQL 命令 cursor = exec(conn, sql); cursor = fetch(cursor); newScore = cursor.data % 顯示更新後 final 欄位的資料 close(cursor); % 結束 cursor 物件 close(conn); % 結束資料庫連結newScore = '傅思為' [100] '薛博謙' [100] '王儀蓁' [ 77] '許肇凌' [ 78] '徐茂原' [100] '李俊仁' [100] '陳晴' [ 79] '鍾綸' [ 77] '謝明峰' [ 77] '蘇金龍' [ 78] '羅瑞麟' [ 77] '林青慧' [100]

此範例所得的結果和 insertData01.m 完全相同,在此不再贅述。


MATLAB程式設計:進階篇